Traté de crear una implementación básica de webauthn, usando la "API de autenticación web" para usar la biometría del usuario.
Hay una cosa que no entiendo y no encontré la respuesta en línea, es: ¿Por qué obtengo una atestación con un formato configurado en ' empaquetado ' de forma predeterminada en lugar de ' fido-u2f '? Qué estoy haciendo mal ?
Este es el "desafío" que devuelvo al usuario cuando solicita el registro:
{ challenge: randomBase64URLBuffer(32), rp: { name: "Fido" }, user: { id: id, name: username, displayName: displayName }, attestation: 'direct', pubKeyCredParams: [ { type: "public-key", alg: -7 }, { type: "public-key", alg: -257 } ] } Luego, después de formatear la respuesta del lado del cliente, la paso a navigator.credentials.create({ publicKey }) como publicKey.
Una vez que se ha enviado de vuelta a la API para confirmar el registro, lo decodifico con cbor.decodeAllSync(myAttestationBuffer) pero todo lo que obtuve es una respuesta de credencial con fmt configurado como packed .
Soy un principiante en este asunto, así que siéntete libre de corregirme :) ¿Hay alguna manera de especificar qué formato de atestación quiero? Probablemente me estoy perdiendo algo...
Gracias por tu ayuda !
El formato de atestación está determinado por lo que admite su navegador y autenticador; no puede solicitar un formato específico.
En el momento de escribir este artículo, Firefox 101.0.1 devuelve la atestación fido-u2f cuando se usa con mi Yubikey compatible con FIDO2, ya que usa el protocolo U2F más antiguo para comunicarse. Firefox usa https://github.com/mozilla/authenticator-rs bajo el capó para esto. La misma clave devuelve el formato de atestación packed más nuevo con Chrome 102.0.5005.115.